package com.example.mybatis.service.impl;

import com.example.mybatis.mapper.RougeMapper;
import com.example.mybatis.service.RougeService;
import com.example.mybatis.service.dto.BrandInfo;
import com.example.mybatis.service.dto.RougeInfo;
import com.github.pagehelper.PageHelper;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.session.RowBounds;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * @author : zhayh
 * @date : 2021-3-31 20:13
 * @description :
 */

@Slf4j
@Service
public class RougeServiceImpl implements RougeService {
    @Resource
    private RougeMapper rougeMapper;

    @Override
    public List<BrandInfo> getAllBrandInfo() {
        return rougeMapper.getAllBrandInfo();
    }

    @Override
    public RougeInfo getRougeById(Long id) {
        return rougeMapper.selectById(id);
    }

    @Override
    public RougeInfo addRouge(RougeInfo rougeInfo) {
        if (rougeMapper.insert(rougeInfo) > 0) {
            return rougeInfo;
        }
        return null;
    }

    @Override
    public RougeInfo updateRougePrice(Long id, Float price) {
        if (rougeMapper.updatePrice(id, price) > 0) {
            return rougeMapper.selectById(id);
        }
        return null;
    }

    @Override
    public Boolean deleteRouge(Long id) {
        return rougeMapper.delete(id) > 0;
    }

    @Override
    public List<RougeInfo> getByKeyword(String keyword, Integer pageNum, Integer pageSize) {
        // startPage拦截下一个SQL，将其改为分页SQL
        PageHelper.startPage(pageNum, pageSize);
        return rougeMapper.selectByKeyword(keyword);
//        // 获取表的总行数
//        page.getTotal();
//        // 分页查询结果的总行数
//        page.size();
//        // 第一个RougeInfo对象
//        page.get(0);List
    }

    public List<RougeInfo> getByRowBounds(String keyword, Integer pageNum, Integer pageSize) {
        return rougeMapper.selectWithRowBounds(keyword, new RowBounds(pageNum, pageSize));
    }

    public List<RougeInfo> getByParam(String keyword, Integer pageNum, Integer pageSize) {
        return rougeMapper.selectWithParam(keyword, pageNum, pageSize);
    }

    // Spring的事务管理
    private Boolean updateContents(Long id, String name, Float price) throws Exception {
        Integer num = rougeMapper.updatePrice(id, price);
        if (num != null && num > 0) {
            log.info("更新后的价格：{}", price);
            if (rougeMapper.updateName(id, name) != null) {
                log.info("更新后的信息：{} - {}", price, name);
                return true;
            }
        }
        throw new Exception("参数异常，更新失败");
    }
}

// 圣罗兰 YSL 口红哑光细管纯口红小金条21号 2.2g【复古正红色 雾面哑光 生日礼物送女友】

